/*************************************************************************
    > File Name: gpd_test.c
    > Author: wangwei 
    > Mail: www.wangweiweio@126.com 
    > Created Time: 2018年08月27日 星期一 09时10分21秒
 ************************************************************************/

#include"getGps.h"

char *get_GPS_api(char *path)				//GPS功能函数 ，获得gps经纬度 返回值：成为为经纬度，失败NULL
//int main()
{
    int fd, nQ, ret, nread;
    const int buf = 512;
    
	char BUF[buf]; //定义了一个BUF。。存放串口返回的数据。。要定义的足够大。。基本都是200左右。。有时会到达300+近400
   
	char *location;	//保存位置，返回
	location = (char*)malloc(20);
	memset(location,0,20);
	
	char cX, cY, cH;
    float fX, fY, fH, test;

    bzero(BUF,buf); //初始化BUF
	
    //fd = open("/dev/ttyUSB0", O_RDWR);//|O_NOCTTY|O_NDELAY);//打开节点
    fd = open(path, O_RDWR|O_NOCTTY|O_NDELAY);//打开节点
    if(fd<0) //出错返回
    {
        perror("Can't open ttyS1!\n");
    }

    serial_init(fd); //初始化串口
    while(1)
    {
		//测试代码
		printf("-----------1---------------\n");
        if(read(fd, BUF, sizeof(BUF))>1) //读数据到BUF。。并判断read操作是否正确。。如果read错误则清空BUF进入下一次循环
        {
           printf("-----------2---------------\n");
			if ((strstr(BUF, "$GPGGA"))!= NULL) //查找BUF中是否有$GPGGA字符串。。并返回这个字符串的起始地址
					{
						ret=sscanf(BUF,"$GPGGA,%f,%f,%c,%f,%c,%d,%*d,%*f,%f,%c",&test, &fX, &cX, &fY, &cY, &nQ, &fH, &cH);    //提取$GPGGA中的相关数值
						sprintf(location, "%f, %c, %f, %c, %f",test, cX, fX, cY, fY); //维度位置。。维度。。经度位置。。经度。。
						break;
					}
		//应用代码
		/*	if ((strstr(BUF, "$GPGGA"))!= NULL) //查找BUF中是否有$GPGGA字符串。。并返回这个字符串的起始地址。。如果没查找到返回NULL则清空BUF进入下一次循环
            {
                ret=sscanf(BUF,"$GPGGA,%*f,%f,%c,%f,%c,%d,%*d,%*f,%f,%c",&fX, &cX, &fY, &cY, &nQ, &fH, &cH);    //提取$GPGGA中的相关数值
                if(ret==7&&(nQ==1||nQ==2))                                    //若提取出的数值为7个。。且其中的nQ位是有GPS工作。。则打印输出。。否则清空BUF进入下一次循环
				{
					sprintf(location,"%c, %f, %c, %f", cX, fX, cY, fY); //维度位置。。维度。。经度位置。。经度。。
					break;
				}
				else
				{
					return NULL;
				}
            }*/
            bzero(BUF, buf);    //清空BUF
        }
        sleep(1);
    }
    close (fd); //关闭文件描述符
    return location;
}

int main()
{
	char *location;
	int n = 10;
	
	char *path = {0};	//GPS的设备路径
	path = (char*)malloc(15);
	memset(path,0,15);
	
	printf("please path:\n");
	scanf("%s",path);
	
	while(n--)
	{
		location = get_GPS_api(path);
		printf("%s\n",location);
	}
	return 0;
}
